// pages/food-detail/food-detail.js
import {
  getFood
} from "../../api/index/food"
import {
  createOrders,
  addCartApi
} from "../../api/order/index"
import {
  showModalCancelAsync
} from "../../utils/modal"

const app = getApp();

Page({

  /**
   * 页面的初始数据
   */
  data: {
    cartShow: false,
    // cart 购物车 pay 立即预定
    type: "",
    // 是否进行收藏
    like: false,
    // 菜品信息
    food: null,
    foodId: null,
    // 默认重量: 100g
    weight: 100,
    // 菜品数量: 默认选择1个
    count: 1,
    // 菜品大图
    foodImage: "",
    // 定时器: 预定按钮时
    timer: null,
    // 菜品收藏人数
    likeNum: 123
  },

  onLoad(options) {
    this.setData({
      foodId: options.id
    }, this.getFoodDetail);
  },

  getFoodDetail() {
    if (!this.data.foodId) return;
    getFood(this.data.foodId).then(
      res => {
        this.setData({
          food: res.data,
          foodImage: app.globalData.resourceUrl + res.data.image
        })
      }
    ).catch(err => {
      console.error(err);
    })
  },

  addCart(event) {
    const dataset = event.currentTarget.dataset;
    this.setData({
      cartShow: true,
      type: dataset.name,
      // 重置选择的数量
      count: 1
    })
  },

  onCartClose() {
    this.setData({
      cartShow: false
    })
  },

  // 收藏该菜品
  likeFood() {
    this.setData({
      like: !this.data.like,
      likeNum: this.data.like ? 123 : 124
    })
  },

  // 选择数量
  onStepChange(e) {
    this.setData({
      count: e.detail
    })
  },

  // 前往称重
  goWeight() {
    showModalCancelAsync("是否前往称重菜品?").then(res => {
      if (res.confirm) {
        wx.switchTab({
          url: '/pages/light/light',
        })
      }
    }).catch(() => {})
  },

  // 前往购物车
  goCart() {
    wx.navigateTo({
      url: '/pages/cart/cart',
    })
  },

  // 添加购物车
  goAddCart() {
    // 正在添加购物车
    if (this.data.timer) return;
    this.startRequest("添加到购物车中");
    const food = {
      foodId: this.data.foodId,
      count: this.data.count
    };
    addCartApi(food).then(res => {
      this.closePopup();
    }).catch(err => {
      console.log("添加购物车失败", err);
    }).finally(() => {
      this.endRequest();
    })
  },

  // 立即预定
  goPay() {
    // 正在创建订单,防止重复触发
    if (this.data.timer) return;
    this.startRequest("创建订单中");
    const food = {
      foodId: this.data.foodId,
      count: this.data.count,
      weight: this.data.weight
    }
    try {
      createOrders([food]).then(res => {
        if (res.order) {
          this.closePopup(
            () => {
              wx.navigateTo({
                url: '/pages/pay/pay?orderNo=' + res.order,
              })
            }
          );
        }
      }).catch(err => {
        console.log("请求失败:", err);
      }).finally(() => {
        this.endRequest();
      })
    } catch (err) {
      console.warn(err);
    }
  },

  /**
   * 关闭弹出层
   * @param {Function} callback 回调函数
   */
  closePopup(callback) {
    this.setData({
      cartShow: false,
    }, () => {
      if (callback) {
        callback();
      }
    })
  },

  /**
   * 开始请求
   * @param {string} content 加载框内容
   */
  startRequest(content) {
    const timer = setTimeout(() => {
      wx.showLoading({
        title: content,
        mask: true
      })
    }, 1000);
    this.setData({
      timer: timer
    });
  },

  /**
   * 结束请求
   */
  endRequest() {
    wx.hideLoading();
    clearTimeout(this.data.timer);
    this.setData({
      timer: null
    })
  }
})